package com.jdl.iscm.config;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @Author: Ran
 * @Date: 2021/8/18
 **/

public interface CacheClient {

    /**
     * 批量查询
     *
     * @param keys key
     * @return 结果
     */
    List<String> mGet(String... keys);

    /**
     * 批量删除
     *
     * @param keys key
     */
    void del(String... keys);

    /**
     * 批量设置
     *
     * @param tuples
     */
    void mSetString(Map<String, String> tuples);

    /**
     * 删除
     *
     * @param key key
     * @return 结果
     */
    void del(String key);

    /**
     * 自增
     *
     * @param key key
     * @return 结果
     */
    long incr(String key);

    /**
     * 查询
     *
     * @param key key
     * @return 结果
     */
    String get(String key);

    /**
     * 设置
     *
     * @param key   key
     * @param value val
     */
    void set(String key, String value);

    /**
     * 设置nx
     *
     * @param key   key
     * @param value val
     */
    boolean setNx(String key, String value);

    /**
     * 通过索引获取列表中的元素
     *
     * @param key key
     * @return val
     */
    String lPop(String key);

    /**
     * 随机返回并删除元素
     *
     * @param key key
     * @return val
     */
    String sPop(String key);

    /**
     * 批量添加
     *
     * @param key    key
     * @param values val
     */
    void sAdd(String key, String... values);

    /**
     * 列表获取
     *
     * @param key   key
     * @param field field
     * @return 值
     */
    String hGet(String key, String field);

    /**
     * 设置超时时间
     *
     * @param key     key
     * @param timeout 时间
     * @param unit    单位
     * @return 结果
     */
    boolean expire(String key, long timeout, TimeUnit unit);

    /**
     * 是否存在
     *
     * @param key key
     * @return
     */
    boolean exists(String key);


    Object getObject(String key);

    void setObject(String key, Object value);
}
